Các từ khóa SQL SQL

Từ khóa SQL chia thành nhiều nhóm:

Lấy dữ liệu

Thao tác sử dụng nhiều nhất trong một cơ sở dữ liệu dựa trên giao dịch là thao tác lấy dữ liệu.

  • SELECT được sử dụng để lấy dữ liệu từ một hoặc nhiều bảng trong cơ sở dữ liệu, SELECT là lệnh thường dùng nhất của ngôn ngữ sửa đổi dữ liệu (tạm dịch) (tiếng Anh: Data Manipulation Language - DML). Trong việc tạo ra câu truy vấn SELECT, người sử dụng phải đưa ra mô tả cho những dữ liệu mình muốn lấy ra chứ không chỉ ra những hành động vật lý nào bắt buộc phải thực hiện để lấy ra kết quả đó. Hệ thống cơ sở dữ liệu, hay chính xác hơn là bộ tối ưu hóa câu truy vấn sẽ dịch từ câu truy vấn sang kế hoạch truy vấn tối ưu.
  • Những từ khóa liên quan tới SELECT bao gồm:
      • FROM dùng để chỉ định dữ liệu sẽ được lấy ra từ những bảng nào, và các bảng đó quan hệ với nhau như thế nào.
      • WHERE dùng để xác định những bản ghi nào sẽ được lấy ra, hoặc áp dụng với GROUP BY.
      • GROUP BY dùng để kết hợp các bản ghi có những giá trị liên quan với nhau thành các phần tử của một tập hợp nhỏ hơn các bản ghi.
      • HAVING dùng để xác định những bản ghi nào, là kết quả từ từ khóa GROUP BY, sẽ được lấy ra.
      • ORDER BY dùng để xác định dữ liệu lấy ra sẽ được sắp xếp theo những cột nào.

Ví dụ sau về việc sử dụng câu lệnh SELECT để lấy danh sách những cuốn sách có giá trị. Câu truy vấn này sẽ truy lục tất cả các bản ghi trong bảng books với giá trị của cột price lớn hơn 100.00. Kết quả sẽ được sắp xếp theo thứ tự tăng dần của các giá trị trong cột title. Dấu (*) trong phần select list cho biết tất cả các cột của bảng books sẽ được lấy ra và thể hiện ở kết quả.

SELECT * FROM booksWHERE price > 100.00ORDER BY title;

Ví dụ sau giải thích cách liên kết nhiều bảng, tập hợp các bản ghi trong câu truy vấn SQL, nó sẽ trả về danh sách các cuốn sách và số tác giả của từng cuốn sách.

SELECT books.title, count(*) AS AuthorsFROM booksJOIN book_authors ON books.isbn = book_authors.isbnGROUP BY books.title;

Kết quả của ví dụ trên giống như sau:

Title Authors---------------------- -------SQL Examples and Guide 3The Joy of SQL 1How to use Wikipedia 2Pitfalls of SQL 1How SQL Saved my Dog 1

(Ký tự gạch chân "_" thường được sử dụng trong tên bảng và tên cột để phân cách các từ vì các ký tự khác có thể mâu thuẫn với cú pháp SQL. Ví dụ như, dấu "-" có thể được hiểu là dấu trừ.)

Với điều kiện cột isbn là cột chung duy nhất của hai bảng và cột title chỉ tồn tại trong bảng books thì câu truy vấn trên có thể được viết lại theo mẫu sau:

SELECT title, count(*) AS AuthorsFROM books NATURAL JOIN book_authors GROUP BY title;

Tuy nhiên nhiều nhà cung cấp không hỗ trợ các thức này, hoặc nó yêu cầu một số quy ước về tên cột nào đó. Như vậy, câu truy vấn trên không được phổ biến.

Sửa đổi dữ liệu

Ngôn ngữ sửa đổi dữ liệu (Data Manipulation Language - DML), là một phần nhỏ của ngôn ngữ, có những thành phần tiêu chuẩn dùng để thêm, cập nhật và xóa dữ liệu delete data.

  • INSERT dùng để thêm dữ liệu vào một bảng đã tồn tại.
  • UPDATE dùng để thay đổi giá trị của một tập hợp các bản ghi trong một bảng.
  • MERGE dùng để kết hợp dữ liệu của nhiều bảng. Nó được dùng như việc kết hợp giữa hai phần tử INSERTUPDATE.
  • DELETE xóa những bản ghi tồn tại trong một bảng.
  • TRUNCATE Xóa toàn bộ dữ liệu trong một bảng (không phải là tiêu chuẩn, nhưng là một lệnh SQL phổ biến).

Giao dịch

Giao dịch, nếu có, dùng để bao bọc các thao tác sửa đổi dữ liệu.Giao dịch (transaction) là một tập các thao tác đi cùng với nhau. Trên môi trường khách/chủ (client/server) hay môi trường cơ sở dữ liệu phân tán việc đảm bảo tính đúng đắn của dữ liệu rất quan trọng. Ví dụ: Một người rút tiền khỏi tài khoản tại ngân hàng, thì tại thời điểm rút tiền, thao tác rút tiền khác phải bị từ chối. Các thao tác trên tài khoản đó có thể hình dung như sau:

 Thao tác 1: <Mở khóa tài khoản> Thao tác 2: <Thực hiện thao tác rút tiền> Thao tác 3: <Khóa tài khoản>

Để đảm bảo các thao tác 1-3 phải đi liền với nhau thì phải đưa vào trong một transaction

<START TRANSACTION> Thao tác 1: <Mở khóa tài khoản> Thao tác 2: <Thực hiện thao tác rút tiền> Thao tác 3: <Khóa tài khoản><END TRANSACTION>

Các lệnh liên quan đến giao dịch:

  • BEGIN WORK (hoặc START TRANSACTION, tùy theo các ngôn ngữ SQL khác nhau) được sử dụng để đánh dấu việc bắt đầu một giao dịch dữ liệu (giao dịch dữ liệu đó có kết thúc hoàn toàn hay không).
  • COMMIT dùng để lưu lại những thay đổi trong giao dịch.
  • ROLLBACK dùng để quay lại thời điểm sử dụng lệnh COMMIT cuối cùng.

SQL Injection

Là một cách chèn đoạn lệnh SQL vào để thực hiện việc vượt qua sự kiểm tra của mệnh đề WHERE. Ví dụ một câu truy vấn lấy tài khoản người dùng:

 SELECT ID, NAME FROM USERS WHERE USERNAME='JONH' AND PASSWORD='1234'

Câu trên chỉ có thể đúng nếu cặp USERNAME và PASSWORD tồn tại trong cơ sở dữ liệu. Câu trên có thể viết injection như sau:thay cụm từ JONH thành: ' OR 1=1 or''=' (lưu ý ký tự nháy đơn ') khi đó câu SQL sẽ trở thành:

 SELECT ID, NAME FROM USERS WHERE USERNAME='' OR 1=1 or''='' AND PASSWORD='1234'

đoạn mã này hoạt động với bất cứ password nào. Việc phòng chống SQL Injection cũng không khó, chỉ cần chú ý khi viết là có thể chống lại được.

Định nghĩa dữ liệu

Ngôn ngữ định nghĩa dữ liệu (Data Definition Language, viết tắt là DDL) là một trong những phần chính của ngôn ngữ truy vấn. Các câu lệnh này dùng để định nghĩa cấu trúc của cơ sở dữ liệu, bao gồm định nghĩa các hàng, các cột, các bảng dữ liệu, các chỉ số và một số thuộc tính khác liên quan đến cơ sở dữ liệu như vị trí của file. Các câu lệnh ngôn ngữ định nghĩa dữ liệu là thành phần chính trong các hệ quản lý dữ liệu và có sự khác biệt rất nhiều giữa các ngôn ngữ truy vấn trên các hệ khác nhau.

Điều khiển dữ liệu

Tài liệu tham khảo

WikiPedia: SQL http://databases.about.com/od/sql/a/sqlfundamental... http://arstechnica.com/business/news/2005/10/msh.a... http://www.britannica.com/EBchecked/topic/569684/S... http://publib.boulder.ibm.com/infocenter/db2luw/v9... http://publib.boulder.ibm.com/infocenter/soliddb/v... http://msdn.microsoft.com/en-gb/library/windows/de... http://www.oed.com/view/Entry/260112?redirectedFro... http://oxforddictionaries.com/definition/american_... http://www.acm.org/classics/nov95/toc.html //dx.doi.org/10.1145%2F362384.362685